package Gradle基础;

Gradle构建(Build)是创建Gradle项目的过程。当我们运行gradle命令时，它将在当前目录中查找名为 build.gradle 的文件。此文件也称为 Gradle构建
脚本。此文件中描述了构建配置(configuration)，任务(tasks)和插件(plugins)。构建脚本描述了一个项目及其任务。

让我们创建一个小的Gradle项目，运行一些基本的Gradle命令，并了解Gradle如何管理该项目。

请按照以下步骤创建和测试Gradle项目。

第1步 - 打开命令行并创建目录

首先，打开命令行并为项目创建目录，然后将目录更改为该目录。

让我们创建一个演示目录。

f:>mkdir gradleMeme
f:>cd gradleMemo

Gradle Build
第2步 - 初始化Gradle项目

要生成Gradle项目，请运行 gradle init 命令。它将生成一个简单的项目。通过这个项目，我们将探索并理解所产生的一切。当我们运行gradle init命令时，它
将要求一些基本要求。首先，它将询问我们要创建的项目类型。它将提供四个选项:

1: basic
2: application
3: library
4: Gradle plugin
选择我们的要求。因此，我们只是在制作一个演示项目，以便我们选择基本选项。要选择基本选项，请按 1 和 Enter 键。考虑以下输出:

选择：1
	
Gradle Build
接下来，它将要求输入 DSL 。 DSL有两个选项:

1: Groovy
2: Kotlin
Groovy是Gradle提供的默认DSL。选择构建脚本DSL 。

选择：1

Gradle Build
接下来，它将要求输入项目名称。输入项目名称，然后按Enter键。建立项目需要一段时间。成功执行项目后，我们会收到一条消息 BUILD SUCCESSFUL 。

Gradle Build
现在，我们已经成功创建了Gradle项目。现在，我们指定的目录会发生什么？考虑一下Gradle项目的以下结构。

Gradle Build
它是Gradle项目的默认结构。 Gradle将为我们生成以下内容:

1.gradle 文件是用于配置当前项目的构建脚本。
2.可执行JAR 文件用作Gradle包装器。
3.Gradle包装器(Wrapper)的配置属性。
4.gradlew 是用于基于UNIX的操作系统的Gradle包装器脚本。
5.bat是Windows的Gradle Wrapper脚本。
6.用于配置Gradle构建的设置脚本(settings script)。
第3步 - 创建任务

Gradle支持用于通过基于Groovy的DSL或基于Kotlin的DSL创建和管理任务的API。每个项目都包含一些基本操作的任务集合。

Gradle支持配置项目的任务库。例如，有一个复制任务，它将文件从一个位置复制到另一位置。复制任务是Gradle中最常用的任务之一。

要在构建脚本中使用复制任务，请执行以下过程。

第一步 - 创建一个名为src的目录。

f:\gradleMemo>mkdir src
f:\gradleMemo>cd src

第二步 - 在src目录中添加一个名为 myfile.txt 的文件。添加单行" Hello，World！"同样，我们可以将其留空。

f:\gradleMemo\src>echo myfile.txt

在 build.gradle 文件中定义一个名为Copy的任务。它将src目录复制到一个名为dest的新目录。我们不必创建dest目录。复制任务将为我们完成。

task copy(type: Copy, group: "Custom", description: "The sources are copied to dest directory") {
    from "src"
    into "dest"
}
我们可以在组和描述中提供任何内容。同样，我们可以省略它们，但是这样做也将在以后使用的任务报告中省略。现在执行我们的新复制任务:

f:\gradleMemo>gradle copy

成功执行任务后，我们将收到 BUILD SUCCES SFUL消息。

build.gradle文件
build.gradle文件是Gradle项目的构建脚本，所有任务和插件都在此文件中定义。

当我们运行gradle命令时，它将在当前目录中查找一个名为build.gradle的文件。尽管我们将其称为构建脚本，但严格来说，它是构建配置脚本。构建脚本定义项
目及其任务。

默认的 build.gradle 文件如下所示:

	/*
	 * This file was generated by the Gradle 'init' task.
	 *
	 * This generated file contains a sample Java library project to get you started.
	 * For more details take a look at the 'Building Java & JVM projects' chapter in the Gradle
	 * User Manual available at https://docs.gradle.org/7.3.3/userguide/building_java_projects.html
	 */

	plugins {
	    // Apply the java-library plugin for API and implementation separation.
	    id 'java-library'
	}

	repositories {
	    // Use Maven Central for resolving dependencies.
	    mavenCentral()
	}

	dependencies {
	    // Use JUnit Jupiter for testing.
	    testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1'

	    // This dependency is exported to consumers, that is to say found on their compile classpath.
	    api 'org.apache.commons:commons-math3:3.6.1'

	    // This dependency is used internally, and not exposed to consumers on their own compile classpath.
	    implementation 'com.google.guava:guava:30.1.1-jre'
	}


build.gradle 文件包含三个默认部分。它们如下:

plugins         -  在本部分中，我们可以应用java-library插件添加对Java库的支持。
Repositories    -  在本部分中，我们可以声明内部和外部存储库以解决依赖关系。我们可以声明Gradle支持的不同类型的存储库，例如Maven，Ant和Ivy。
Dependencies    -  在本节中，我们可以声明特定主题所必需的依赖关系。
此外，我们可以在此文件中声明其他与项目相关的模块，例如任务。

显示项目信息
为了了解构建的结构，依赖关系和调试问题，Gradle提供了许多内置功能来在项目上显示信息。

以下是一些用于显示项目信息的基本命令:

【列出项目】

在Gradle中，可以在层次结构中列出工作区中项目的所有子项目。为此，请从项目的根目录运行以下命令。

gradle -q projects
 Gradle Build

【列出任务】

Gradle允许我们列出项目的所有基本任务。要列出任务，请运行以下命令:

gradle -q tasks
输出:

C:\Users\HiMaNshU\eclipse-workspace>gradle -q tasks
------------------------------------------------------------
Tasks runnable from root project
------------------------------------------------------------
Build Setup tasks
-----------------
init - Initializes a new Gradle build.
wrapper - Generates Gradle wrapper files.
Help tasks
----------
buildEnvironment - Displays all buildscript dependencies declared in root project 'eclipse-workspace'.
components - Displays the components produced by root project 'eclipse-workspace'. [incubating]
dependencies - Displays all dependencies declared in root project 'eclipse-workspace'.
dependencyInsight - Displays the insight into a specific dependency in root project 'eclipse-workspace.'
dependentComponents : It displays the dependent components of components in the root project 'eclipse-workspace.' [incubating]
help - Displays a help message.
model - Displays the configuration model of root project 'eclipse-workspace.' [incubating]
projects - Displays the sub-projects of root project 'eclipse-workspace.'
properties - Displays the properties of root project 'eclipse-workspace.'
tasks - Displays the tasks runnable from root project 'eclipse-workspace.'
To see all tasks and more detail, run gradle tasks --all
To see more detail about a task, run gradle help --task <task>
要列出项目的所有任务，请运行以下命令:

gradle tasks -all
要显示有关任务的更多详细信息，请运行以下命令:

gradle help --task

【列出依赖项】

在Gradle中，我们可以列出按配置细分的依赖项。要列出依赖关系，请运行以下命令:

gradle -q dependencies
输出:

Gradle Build
